package servlet;

import dao.DaoArtista;
import dao.DaoMusica;
import dao.DaoTagArtista;
import dao.DaoTagMusica;
import entidades.Artista;
import entidades.Musica;
import entidades.TagArtista;
import entidades.TagMusica;
import java.io.IOException;
import java.text.ParseException;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import util.Global;
import util.Upload;
import util.Util;

/**
 *
 * @author Tarde
 */
@WebServlet(name = "ServletCadArtista", urlPatterns = {"/ServletCadArtista"})
public class ServletCadArtista extends HttpServlet {

    /** 
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String nome = request.getParameter("nome");
        String historia = request.getParameter("historia");
        String nacionalidade = request.getParameter("nacionalidade");
        String imagem = request.getParameter("imagem");
        String tags = request.getParameter("tags");
        String funcao = request.getParameter("funcao");
        
        String dtNasc = request.getParameter("dataNascimento");
        Date nascimento = null;
        try {
            nascimento = Util.validaData(dtNasc);
        } catch (ParseException ex) {
            Logger.getLogger(ServletCadArtista.class.getName()).log(Level.SEVERE, null, ex);
            request.setAttribute("erro", "Formato de data incorreto E/OU data inválida (Ex: dd/mm/aaaa)");
            RequestDispatcher rd = request.getRequestDispatcher("cadArtista.jsp");
            rd.forward(request, response);
        }
        if (Util.valida(Util.CAMPO_TEXTO, nome) && Util.valida(Util.CAMPO_TEXTO, historia) && Util.valida(Util.CAMPO_TEXTO, nacionalidade)
                && Util.valida(Util.CAMPO_ARQUIVO, imagem) && Util.valida(Util.CAMPO_TEXTO, tags) && Util.valida(Util.CAMPO_TEXTO, funcao)) {
            Upload upload = new Upload(getServletContext().getRealPath(Global.artistData_path + "/" + nome));
            List list = upload.processRequest(request);
            Map<String, String> map = upload.getFormValues(list);
            
            Artista artista = new Artista(nome, nascimento, funcao, historia, nacionalidade, imagem);
            
            DaoTagArtista daoTag = new DaoTagArtista();
            String[] str = tags.split(";");
            for (String tagName : str) {
                tagName.trim();
                List<TagArtista> l = daoTag.buscaTagNome(tags);
                if (l.isEmpty()) {
                    TagArtista tag = new TagArtista(tagName);
                    tag.addArtista(artista);
                    artista.addTag(tag);
                    daoTag.insert(tag);
                } else {
                    TagArtista tag = l.get(0);
                    tag.addArtista(artista);
                    artista.addTag(tag);
                    daoTag.update(tag);
                }
            }
            new DaoArtista().insert(artista);

            RequestDispatcher rd = request.getRequestDispatcher("homeAdmin.jsp");
            rd.forward(request, response);
        } else {
            request.setAttribute("erro", "Nenhum dos campos pode ser vazio");
            RequestDispatcher rd = request.getRequestDispatcher("cadMusica.jsp");
            rd.forward(request, response);
        }
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /** 
     * Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /** 
     * Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /** 
     * Returns a short description of the servlet.
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>
}
